home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tech Arsenal 1
/
Tech Arsenal (Arsenal Computer).ISO
/
tek-01
/
msoftapp.zip
/
HELLO.CPP
< prev
next >
Wrap
C/C++ Source or Header
|
1993-06-01
|
4KB
|
134 lines
// hello.cpp : Defines the class behaviors for the Hello child window.
#include"viewer.h"
BEGIN_MESSAGE_MAP(CHelloWin, CMDIChildWnd)
ON_WM_CREATE()
ON_COMMAND(IDM_BLACK, OnColor)
ON_COMMAND(IDM_RED, OnColor)
ON_COMMAND(IDM_GREEN, OnColor)
ON_COMMAND(IDM_BLUE, OnColor)
ON_COMMAND(IDM_WHITE, OnColor)
ON_COMMAND(IDM_CUSTOM, OnColor)
ON_WM_PAINT()
ON_WM_MDIACTIVATE()
ON_WM_DESTROY()
END_MESSAGE_MAP()
// Create: Register a custom WndClass and create a window.
// This must be done because CHelloWin has a custom icon.
BOOL CHelloWin::Create(LPCSTR szTitle, DWORD style,const RECT& rect,
CMDIFrameWnd* parent)
{
const char* pszHelloClass =
AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW,
LoadCursor(NULL, IDC_ARROW),
(HBRUSH)(COLOR_WINDOW+1),
LoadIcon(AfxGetInstanceHandle(), "hello"));
return CMDIChildWnd::Create(pszHelloClass, szTitle, style, rect, parent);
}
// Constructor: Do minimum initialization
CHelloWin::CHelloWin()
{
m_ColorID = 0;
m_TextColor = 0L;
m_pMenuCurrent = NULL;
m_bWindowActive = FALSE;
}
// Destructor: Clean up menu iff Windows won't
CHelloWin::~CHelloWin()
{
if(m_bWindowActive)
{
// Suppress Foundation DestroyMenu done in CMenu destructor
//(Windows takes care of menu cleanup for the active window)
//
m_pMenuCurrent->Detach();
}
}
// OnCreate:
// Set up colors -- this also could have been done in constructor
int CHelloWin::OnCreate(LPCREATESTRUCT /* p */)
{
m_ColorID = IDM_BLACK;
m_TextColor = clrTextArray[0];
return 0;
}
// OnDestroy:
// Notify app main MDI frame window of destruction so it may
// do some cleanup.
void CHelloWin::OnDestroy()
{
GetMDIFrame()->SendMessage(WM_CHILDDESTROY,(UINT)m_hWnd, 0);
}
// OnColor: Change menu checkmarks to indicate the newly selected color.
void CHelloWin::OnColor()
{
CMenu* pMenu = GetMDIFrame()->GetMenu();
pMenu->CheckMenuItem(m_ColorID, MF_UNCHECKED);
m_ColorID = GetCurrentMessage()->wParam;
pMenu->CheckMenuItem(m_ColorID, MF_CHECKED);
if(m_ColorID != IDM_CUSTOM)
m_TextColor = clrTextArray[m_ColorID - IDM_BLACK];
else
{
CColorDialog dlgColor(m_TextColor);
if(dlgColor.DoModal() == IDOK)
m_TextColor = dlgColor.GetColor();
}
// Force the client area text to be repainted in the new color
Invalidate();
}
// OnPaint: Draw a string in the center of the client area.
void CHelloWin::OnPaint()
{
CPaintDC dc(this);
dc.SetTextColor(m_TextColor);
dc.SetBkColor(::GetSysColor(COLOR_WINDOW));
CRect rect;
GetClientRect(rect);
dc.DrawText("Hello, World!", -1, rect,
DT_SINGLELINE | DT_CENTER | DT_VCENTER);
}
// OnMDIActivate: window is being activated or deactivated.
// Switch the menus appropriately.
void CHelloWin::OnMDIActivate(BOOL bActivate, CWnd*, CWnd*)
{
CMDIFrameWnd* pFrame = GetMDIFrame();
CMenu* pWinPopupMenu = NULL;
CMenu* pMenu = new CMenu;
m_bWindowActive = bActivate;
if(bActivate)
{
pMenu->LoadMenu("Hello");
pWinPopupMenu = pMenu->GetSubMenu(HELLO_MENU_POS);
CMenu* pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
pLastMenu->DestroyMenu();
pMenu->CheckMenuItem(m_ColorID, MF_CHECKED);
}
else
{
pMenu->LoadMenu("Init");
pWinPopupMenu = pMenu->GetSubMenu(INIT_MENU_POS);
CMenu* pLastMenu = pFrame->MDISetMenu(pMenu, pWinPopupMenu);
pLastMenu->DestroyMenu();
}
delete m_pMenuCurrent;
m_pMenuCurrent = pMenu;
pFrame->DrawMenuBar();
}